package com.haochang.chunkvod.view.vod.timepicker;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 日期工具类
 *     @author Yobert Jomi
 *     className DateUtil
 *     created at  2016/10/28  16:16
 */
public class DateUtil
{
	private static volatile DateUtil singleTonInstance;

	public static DateUtil getInstance()
	{
		if (null == singleTonInstance)
		{
			synchronized (DateUtil.class)
			{
				if (null == singleTonInstance)
				{
					singleTonInstance = new DateUtil();
				}
			}
		}
		return singleTonInstance;
	}

	public int getMonthDays(int year, int month)
	{
		if (month > 12)
		{
			month = 1;
			year += 1;
		} else if (month < 1)
		{
			month = 12;
			year -= 1;
		}
		int[] arr = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		int days = 0;

		if (isLeapYear(year))
		{
			arr[1] = 29; // 闰年2月29天
		}

		try
		{
			days = arr[month - 1];
		} catch (Exception e)
		{
			e.getStackTrace();
		}

		return days;
	}

	/**
	 * 是否为闰年
	 *
	 * @param year 年份
	 * @return 是否闰年
	 */
	private boolean isLeapYear(int year)
	{
		return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
	}

	/**
	 * 根据年份和月份获取日期数组，1、2、3...
	 *
	 * @param year 年
	 * @param month 月
	 * @return 日期数组
	 */
	public List<String> getMonthDaysArray(int year, int month)
	{
		List<String> dayList = new ArrayList<String>();
		int days = DateUtil.getInstance().getMonthDays(year, month);
		for (int i = 1; i <= days; i++)
		{
			dayList.add(i + "日");
		}
		return dayList;
	}

	/**
	 * 获取当前系统时间的年份
	 */
	public int getYear()
	{
		return Calendar.getInstance().get(Calendar.YEAR);
	}

	/**
	 * 获取当前系统时间的月份
	 *
	 * @return 当前月份
	 */
	public int getMonth()
	{
		return Calendar.getInstance().get(Calendar.MONTH) + 1;
	}

	/**
	 * 获取当前系统时间的月份的第几天
	 *
	 * @return 当前第几天
	 */
	public int getCurrentMonthDay()
	{
		return Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 获取当前系统时间的小时数
	 *
	 * @return 当前系统时间的小时数
	 */
	public int getHour()
	{
		return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
	}

	/**
	 * 获取当前系统时间的分钟数
	 *
	 * @return 前系统时间的分钟数
	 */
	public int getMinute()
	{
		return Calendar.getInstance().get(Calendar.MINUTE);
	}

	/**
	 * 获取当前系统时间的秒数
	 *
	 * @return 当前系统时间的秒数
	 */
	public int getSecond()
	{
		return Calendar.getInstance().get(Calendar.SECOND);
	}

	/**
	 * 根据系统默认时区，获取当前时间与time的天数差
	 *
	 * @param time 时间戳
	 * @return 等于0表示今天，大于0表示今天之前
	 */
	public long getDaySpan(long time)
	{
		// 系统默认时区，ms
		int tiemzone = TimeZone.getDefault().getRawOffset();
		// １天＝24*60*60*1000ms
		return (System.currentTimeMillis() + tiemzone) / 86400000 - (time + tiemzone) / 86400000;
	}

	public boolean isToday(long time)
	{
		return getDaySpan(time) == 0;
	}

	public boolean isYestoday(long time)
	{
		return getDaySpan(time) == 1;
	}

	/**
	 * @return 返回当前时间，yyyy-MM-dd HH-mm-ss
	 */
	public static String getDate()
	{
		return DateUtil.getInstance().getDate("yyyy-MM-dd HH-mm-ss");
	}

	public String getDate(String format)
	{
		SimpleDateFormat sDateFormat = new SimpleDateFormat(format, Locale.getDefault());
		return sDateFormat.format(new java.util.Date());
	}
}